# https://www.runoob.com/python/att-string-format.html

# Python2.6 开始，新增了一种格式化字符串的函数 str.format()，它增强了字符串格式化的功能。

# 基本语法是通过 {} 和 : 来代替以前的 % 。

# format 函数可以接受不限个参数，位置可以不按顺序

print("不设置指定位置，按默认顺序")
print("{} {}".format("hello", "world"))

print("设置指定位置")
print("{0} {1}".format("hello", "world"))
print("{1} {0} {1}".format("hello", "world"))

# 也可以设置参数：
print("网站名：{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))

# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名：{name}, 地址 {url}".format(**site))

# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名：{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的


# 也可以向 str.format() 传入对象：
class AssignValue(object):
    def __init__(self, value):
        self.value = value


my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value))  # "0" 是可选的
print('value 为: {.value}'.format(my_value))  # "0" 是可选的

# str.format() 格式化数字的多种方法：
print("保留小数点后两位")
print("{:.2f}".format(3.1415926))
# + 表示在正数前显示 +，负数前显示 -；  （空格）表示在正数前加空格
print("带符号保留小数点后两位")
print("{:+.2f}".format(3.1415926))

print("带符号保留小数点后两位")
print("{:.2f}".format(-1))

print("不带小数")
print("{:.0f}".format(2.71828))

print("数字补零 (填充左边, 宽度为2)")
print("{:0>2d}".format(5))

print("数字补x (填充右边, 宽度为4)")
print("{:x<4d}".format(5))

print("数字补x (填充右边, 宽度为4)")
print("{:x<4d}".format(10))

print("以逗号分隔的数字格式")
print("{:,}".format(1000000))

print("百分比格式")
print("{:.2%}".format(.25))

print("指数记法")
print("{:.2e}".format(1000000000))

# ^, <, > 分别是居中、左对齐、右对齐，后面带宽度， : 号后面带填充的字符，只能是一个字符，不指定则默认是用空格填充。
print("右对齐 (默认, 宽度为10)")
print("{:>10d}".format(13))
print("右对齐 (宽度为20)")
print("{:>20d}".format(13))

print("左对齐 (宽度为10))")
print("{:<10d}".format(13))

print("中间对齐 (宽度为10)")
print("{:^10d}".format(13))

# b、d、o、x 分别是二进制、十进制、八进制、十六进制。
print("进制")
print('{:b}'.format(11))
print('{:d}'.format(11))
print('{:o}'.format(11))
print('{:x}'.format(11))
print('{:#x}'.format(11))
print('{:#X}'.format(11))

# 此外我们可以使用大括号 {} 来转义大括号，如下实例：
print("{} 对应的位置是 {{0}}".format("runoob"))
